package klassen;

import interfaces.Verkaueflich;

public abstract class Fahrzeug implements Verkaueflich, Cloneable {

	public static int erstellteFahrzeuge = 0;
	public static final int DEFAULT_TUNEWERT = 50;

	private int preis;
	private int leistung;

	private String hersteller;

	/**
	 * Konstruktor komplett
	 * 
	 * @param leistung
	 * @param hersteller
	 * @param preis
	 */
	public Fahrzeug(int leistung, String hersteller, int preis) {
		this.hersteller = hersteller;
		setLeistung(leistung);
		setPres(preis);

		erstellteFahrzeuge++;

	}

	public Fahrzeug(String hersteller) {
		this(100, hersteller, 0);
	}

	public void setPres(int preis) {
		this.preis = preis;
	}

	/**
	 * Wird vom Interface gezwungen zu implementieren
	 */
	public int getPreis() {
		return preis;
	}

	public void setLeistung(int leistung) {
		boolean ok = leistung > 0;

		if (ok) {
			this.leistung += leistung;
		}

	}
	
	
	public int getLeistung(){
		return leistung;
	}

	
	public void tunen(int tuneWert) {
		if (tuneWert <= 0) {
			throw new RuntimeException("Der tunewert darf nicht negativ sein");
		}

		leistung += tuneWert;
	}

	public void tunen() {
		tunen(DEFAULT_TUNEWERT);
	}

	
	public String getHersteller(){
		return hersteller;
	}
	
	
	/**
	 * Test Override
	 */
	@Override
	public String toString() {

		return "Die Leistung ist: " + leistung + ", der Hersteller ist: "
				+ hersteller;

	}

	/**
	 * Test abstract
	 * 
	 * Methode mus in der Kindklasse verwendet werden
	 */
	public abstract void crashTest();

	@Override
	public Fahrzeug clone() {
		Fahrzeug f = null;
		try {
			f = (Fahrzeug) super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return f;
	}

}
